// 引入拼音转换库（需安装：npm install js-pinyin）
import pinyin from 'js-pinyin';

// 初始化拼音配置
pinyin.setOptions({
	checkPolyphone: false, // 不考虑多音字
	charCase: 0 // 0: 小写，后续统一转为大写处理
});

/**
 * 获取汉字首字母（大写）
 * @param {string} name 中文名称
 * @returns {string} 首字母（非字母返回 '#'）
 */
function getFirstLetter(name) {
	if (!name || typeof name !== 'string') return '#';

	const firstChar = name.charAt(0);
	// 处理纯字母
	if (/[A-Za-z]/.test(firstChar)) {
		return firstChar.toUpperCase();
	}

	// 转换为拼音首字母
	const py = pinyin.getFullChars(firstChar);
	const firstLetter = py.charAt(0).toUpperCase();

	return /[A-Z]/.test(firstLetter) ? firstLetter : '#';
}

/**
 * 先按拼音排序，再按首字母分组
 * @param {Array} list 包含 name 字段的数组
 * @returns {Object} 分组结果 { 'A': [...], 'B': [...], ..., '#': [...] }
 */
export function sortAndGroupByLetter(list) {
	// 1. 先按拼音全拼排序
	const sortedList = [...list].sort((a, b) => {
		const pyA = pinyin.getFullChars(a.label).toLowerCase();
		const pyB = pinyin.getFullChars(b.label).toLowerCase();
		return pyA.localeCompare(pyB);
	});

	// 2. 按首字母分组
	const groups = sortedList.reduce((acc, item) => {
		const letter = getFirstLetter(item.label);
		if (!acc[letter]) {
			acc[letter] = [];
		}
		acc[letter].push(item);
		return acc;
	}, {});

	// 3. 对分组键按字母顺序排序（A-Z 在前，# 在后）
	const orderedGroups = {};
	Object.keys(groups)
		.sort((a, b) => {
			if (a === '#') return 1;
			if (b === '#') return -1;
			return a.localeCompare(b);
		})
		.forEach(letter => {
			orderedGroups[letter] = groups[letter];
		});

	return orderedGroups;
}

// 示例用法
// import { sortAndGroupByLetter } from '@/utils/sortAndGroup.js'
// 
// const data = [
//   { name: '苹果' },
//   { name: '香蕉' },
//   { name: '橙子' },
//   { name: '西瓜' },
//   { name: '2号水果' },
//   { name: '葡萄' },
// ];
// 
// const result = sortAndGroupByLetter(data);
// console.log(result);